package com.love.marriage.userProfileInfo.vo;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.love.marriage.common.vo.BaseVo;
import com.love.marriage.config.Long2StringSerializer;
import com.love.marriage.identityVerification.vo.IdentityVerificationVo;
import com.love.marriage.matchmakerInfo.vo.MatchmakerInfoVo;
import com.love.marriage.offlineServiceProvider.vo.OfflineServiceProviderVo;
import com.love.marriage.oss.vo.FileInfoVo;
import com.love.marriage.personalImageryInfo.vo.PersonalImageryInfoVo;
import com.love.marriage.userMembershipInfo.vo.UserMembershipInfoVo;
import com.love.marriage.userPartnerPreferences.vo.UserPartnerPreferencesVo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

/**
 * description:  用户档案表Vo
 * author:       mybatisPlus
 * createDate:   2024-10-12 21:01:09
 * version:      1.0.0
 */
@Getter
@Setter
@Accessors(chain = true)
@Schema(name = "UserProfileInfoVo", description = "用户档案表Vo")
public class UserProfileInfoVo extends BaseVo<UserProfileInfoVo>{

    @Schema(name = "type", description = "用户类型筛选条件(member:会员,matchmaker:红娘,partner:合伙人)", type = "String", implementation = String.class)
    private String type;

    @Schema(name = "nickname", description = "昵称", type = "String", implementation = String.class)
    private String nickname;

    @Schema(name = "gender", description = "性别(0：男，1：女)", type = "String", implementation = String.class)
    private String gender;

    @Schema(name = "birthYearMonth", description = "出生年月", type = "LocalDate", implementation = LocalDate.class)
    private LocalDate birthYearMonth;

    @Schema(name = "height", description = "身高 (单位: cm)", type = "BigDecimal", implementation = BigDecimal.class)
    private BigDecimal height;

    @Schema(name = "weight", description = "体重 (单位: kg)", type = "BigDecimal", implementation = BigDecimal.class)
    private BigDecimal weight;

    @Schema(name = "residence", description = "居住所在地", type = "String", implementation = String.class)
    private String residence;

    @Schema(name = "residenceName", description = "居住所在地名称", type = "String", implementation = String.class)
    private String residenceName;

    @Schema(name = "maritalStatus", description = "婚姻状况,字典(matrimony)", type = "String", implementation = String.class)
    private String maritalStatus;

    @Schema(name = "maritalStatusName", description = "婚姻状况名称", type = "String", implementation = String.class)
    private String maritalStatusName;

    @Schema(name = "educationLevel", description = "最高学历/文化层次,字典(education)", type = "String", implementation = String.class)
    private String educationLevel;

    @Schema(name = "educationLevelName", description = "最高学历/文化层次名称", type = "String", implementation = String.class)
    private String educationLevelName;

    @Schema(name = "profession", description = "从事行业/职业,字典(profession)", type = "String", implementation = String.class)
    private String profession;

    @Schema(name = "professionName", description = "从事行业/职业名称", type = "String", implementation = String.class)
    private String professionName;

    @Schema(name = "incomeStatus", description = "收入情况,字典(income)", type = "String", implementation = String.class)
    private String incomeStatus;

    @Schema(name = "incomeStatusName", description = "收入情况名称", type = "String", implementation = String.class)
    private String incomeStatusName;

    @Schema(name = "carHouseStatus", description = "车房情况,字典(assets)", type = "String", implementation = String.class)
    private String carHouseStatus;

    @Schema(name = "carHouseStatusName", description = "车房情况名称", type = "String", implementation = String.class)
    private String carHouseStatusName;

    @Schema(name = "specialNote", description = "特殊说明", type = "String", implementation = String.class)
    private String specialNote;

    @Schema(name = "partnerRequirements", description = "择偶要求", type = "String", implementation = String.class)
    private String partnerRequirements;

    @Schema(name = "loveView", description = "我的爱情观", type = "String", implementation = String.class)
    private String loveView;

    @Schema(name = "idealPartner", description = "理想中的Ta", type = "String", implementation = String.class)
    private String idealPartner;

    @Schema(name = "contactPhone", description = "联系方式", type = "String", implementation = String.class)
    private String contactPhone;

    @Schema(name = "avatarIds", description = "个人形象照片ID, 多个ID用逗号隔开", type = "String", implementation = String.class)
    private String avatarIds;

    @JsonSerialize(using = Long2StringSerializer.class)
    @Schema(name = "userId", description = "用户id", type = "Long", implementation = Long.class, required = true)
    private Long userId;

    @Schema(name = "zodiac", description = "星座,字典(zodiac)", type = "String", implementation = String.class)
    private String zodiac;

    @Schema(name = "zodiacName", description = "星座名称", type = "String", implementation = String.class)
    private String zodiacName;

    @Schema(name = "cnZodiac", description = "属相,字典(cnZodiac)", type = "String", implementation = String.class)
    private String cnZodiac;

    @Schema(name = "cnZodiacName", description = "属相名称", type = "String", implementation = String.class)
    private String cnZodiacName;

    @Schema(name = "personalImageryInfoVoList", description = "个人形象雷彪", type = "array", implementation = PersonalImageryInfoVo.class)
    private List<PersonalImageryInfoVo> personalImageryInfoVoList;

    @Schema(name = "school", description = "学校,字典(school)", type = "String", implementation = String.class)
    private String school;

    @Schema(name = "schoolName", description = "学校名称", type = "String", implementation = String.class)
    private String schoolName;

    @Schema(name = "educationType", description = "教育类型,字典(educationType)", type = "String", implementation = String.class)
    private String educationType;

    @Schema(name = "educationTypeName", description = "教育类型名称", type = "String", implementation = String.class)
    private String educationTypeName;

    @JsonSerialize(using = Long2StringSerializer.class)
    @Schema(name = "provinceId", description = "省id", type = "Long", implementation = Long.class)
    private Long provinceId;

    @Schema(name = "provinceName", description = "省名称", type = "String", implementation = String.class)
    private String provinceName;

    @JsonSerialize(using = Long2StringSerializer.class)
    @Schema(name = "cityId", description = "城市id", type = "Long", implementation = Long.class)
    private Long cityId;

    @Schema(name = "cityName", description = "城市名称", type = "String", implementation = String.class)
    private String cityName;

    @JsonSerialize(using = Long2StringSerializer.class)
    @Schema(name = "districtId", description = "区id", type = "Long", implementation = Long.class)
    private Long districtId;

    @Schema(name = "districtName", description = "区名称", type = "String", implementation = String.class)
    private String districtName;

    @Schema(name = "showPhone", description = "展示手机标识", type = "Boolean", implementation = Boolean.class)
    private Boolean showPhone;

    @Schema(name = "showWechat", description = "展示微信标识", type = "Boolean", implementation = Boolean.class)
    private Boolean showWechat;

    @Schema(name = "wechatQrCodeId", description = "微信二维码id", type = "Long", implementation = Long.class)
    @JsonSerialize(using = Long2StringSerializer.class)
    private Long wechatQrCodeId;

    @Schema(name = "wechatQrCodeFile", description = "微信二维码文件", type = "FileInfoVo", implementation = FileInfoVo.class)
    private FileInfoVo wechatQrCodeFile;

    @Schema(name = "autoExchangeContact", description = "自动交换联系方式", type = "Boolean", implementation = Boolean.class)
    private Boolean autoExchangeContact;

    @Schema(name = "firstFlag", description = "是否第一次提交", type = "Boolean", implementation = Boolean.class)
    private Boolean firstFlag;

    @Schema(name = "publishPeopleType", description = "发布人类型,字典(publish_people_type)", type = "String", implementation = String.class)
    private String publishPeopleType;

    @Schema(name = "publishPeopleTypeName", description = "发布人类型名称,字典(publish_people_type)", type = "String", implementation = String.class)
    private String publishPeopleTypeName;

    @JsonSerialize(using = Long2StringSerializer.class)
    @Schema(name = "sharePhotoId", description = "分享照片ID", type = "Long", implementation = Long.class)
    private Long sharePhotoId;

    @Schema(name = "sharePhotoUrl", description = "分享照片Url", type = "String", implementation = String.class)
    private String sharePhotoUrl;

    @Schema(name = "code", description = "编码", type = "String", implementation = String.class)
    private String code;

    @Schema(name = "phone", description = "电话", type = "String", implementation = String.class)
    private String phone;

    // --- 身份标识 ---
    private Boolean membershipFlag;

    // 添加会员类型名称字段
    @Schema(name = "membershipName", description = "会员类型名称", type = "String", implementation = String.class)
    private String membershipName;

    private Boolean matchmakerFlag;

    private Boolean partnerFlag;

    @Schema(name = "identityVerificationVo", description = "身份认证", type = "IdentityVerificationVo", implementation = IdentityVerificationVo.class)
    private IdentityVerificationVo identityVerificationVo;

    @Schema(name = "userMembershipInfoVo", description = "用户会员", type = "IdentityVerificationVo", implementation = IdentityVerificationVo.class)
    private UserMembershipInfoVo userMembershipInfoVo;

    @Schema(name = "matchmakerInfoVo", description = "红娘", type = "IdentityVerificationVo", implementation = IdentityVerificationVo.class)
    private MatchmakerInfoVo matchmakerInfoVo;

    @Schema(name = "offlineServiceProviderVo", description = "合伙人", type = "IdentityVerificationVo", implementation = IdentityVerificationVo.class)
    private OfflineServiceProviderVo offlineServiceProviderVo;

    @Schema(name = "userPartnerPreferencesVo", description = "用户择偶要求", type = "UserPartnerPreferencesVo", implementation = UserPartnerPreferencesVo.class)
    private UserPartnerPreferencesVo userPartnerPreferencesVo;
}